home *** CD-ROM | disk | FTP | other *** search
- code segment
- assume cs:code, ds:code, es:code
- org 100h
- prog:
- jmp main
-
- asc db 256 dup (0)
- lll dw ?
- tbl dw 256 dup (0)
- cod db 256 dup (0)
- len db 256 dup (0)
- dat db 0,10,16,9,64,8,64,8,0,7
- fn1 db 'te.com',0
- fn2 db 'sup.com',0
- fn3 db 'e1.com',0
- fn4 db 'dat.dat',0
- main:
-
- call read
- call build
- call uha
- call good
- call write
-
- mov al,00h
- mov ah,4ch
- int 21h
-
- good proc near
- mov ax,cs
- mov ds,ax
- mov si,offset asc
- mov di,179
- mov cx,130
- rep movsb
-
- mov dx,offset fn3
- mov al,00h
- mov ah,3dh
- int 21h
- jc ssr
- mov bx,ax
- mov ax,es
- mov ds,ax
- sub dx,dx
- mov cx,179
- mov ah,3fh
- int 21h
- jc ssr
- mov ah,3eh
- int 21h
- mov ax,cs
- mov ds,ax
- ssr: ret
- good endp
-
- uha proc near
- mov ax,cs
- add ax,1000h
- mov ds,ax
- add ax,1000h
- mov es,ax
- mov bx,4fffh
- mov di,bx
- mov ch,0
- sub bp,bp
- lu10: sub ax,ax
- mov al,[bx]
- mov si,ax
- mov al,cs:cod[si]
- mov dl,cs:len[si]
- mov cl,dl
- cmp dl,7
- jne lu20
- inc ah
- lu20: sub cl,ch
- shl ax,cl
- or bp,ax
- add ch,16
- sub ch,dl
- mov cl,8
- lu30: cmp ch,cl
- jc lu40
- mov ax,bp
- shl bp,cl
- mov es:[di],ah
- dec di
- sub ch,cl
- jmp short lu30
- lu40: dec bx
- cmp bx,0ffffh
- jne lu10
- mov ax,bp
- mov es:[di],ah
- mov lll,di
- mov ah,0
- lu50: dec di
- mov es:[di],ah
- cmp di,0
- jne lu50
- ret
- uha endp
-
- fill proc near
- sub si,si
- mov cx,0100h
- lf10: mov ax,si
- mov cs:asc[si],al
- inc si
- loop lf10
- sub bx,bx
- mov cx,5000h
- lf20: mov al,[bx]
- mov si,ax
- shl si,1
- inc cs:tbl[si]
- inc bx
- loop lf20
- ret
- fill endp
-
- swap proc near
- push ax
- mov ax,tbl[si]
- xchg ax,tbl[di]
- mov tbl[si],ax
- shr si,1
- shr di,1
- mov al,asc[si]
- xchg al,asc[di]
- mov asc[si],al
- shl si,1
- shl di,1
- pop ax
- ret
- swap endp
-
- sort proc near
-
- mov bp,32
- mov cl,1
- ss00: sub ax,ax
- mov dx,510
- ss05: mov di,ax
- mov bx,tbl[di]
- mov si,di
- ss10: cmp si,dx
- je ss20
- inc si
- inc si
- cmp bx,tbl[si]
- jnc ss10
- inc di
- inc di
- call swap
- jmp short ss10
- ss20: mov si,ax
- call swap
- cmp di,bp
- je ss40
- jc ss30
- mov dx,di
- dec dx
- dec dx
- jmp short ss05
- ss30: mov ax,di
- inc ax
- inc ax
- jmp short ss05
- ss40: shl bp,cl
- shl cl,1
- cmp cl,8
- jne ss00
-
- ; call writ
-
- mov di,offset asc + 128
- sub bx,bx
- k10: mov [bx][di],bl
- inc bl
- jnz k10
- mov si,offset asc
- k20: mov bl,[si]
- mov byte ptr [bx][di],0
- inc si
- cmp si,di
- jne k20
- dec di
- mov cx,128
- k30: inc di
- cmp byte ptr [di],0
- je k30
- mov al,[di]
- mov [si],al
- inc si
- loop k30
- ret
- sort endp
-
- make proc near
- mov cx,16
- mov bx,offset dat
- sub si,si
- sub ax,ax
- lm10: mov al,asc[si]
- mov di,ax
- mov dx,si
- add dl,[bx]
- mov cod[di],dl
- mov dl,[bx+1]
- mov len[di],dl
- inc si
- cmp si,cx
- jnz lm10
- inc bx
- inc bx
- shl cx,1
- cmp cx,512
- jnz lm10
- ret
- make endp
-
- build proc near
- call fill
- mov ax,cs
- mov ds,ax
- call sort
- call make
- ret
- build endp
-
- write proc near
- mov dx,offset fn2
- mov al,02h
- mov ah,3dh
- int 21h
- jc sw
- mov bx,ax
- mov ax,es
- mov ds,ax
- sub dx,dx
- mov cx,5000h
- mov ah,40h
- int 21h
- jc sw
- mov ah,3eh
- int 21h
- sw: ret
- write endp
-
- read proc near
- mov dx,offset fn1
- mov al,00h
- mov ah,3dh
- int 21h
- jc sr
- mov bx,ax
- mov ax,ds
- add ax,1000h
- mov ds,ax
- sub dx,dx
- mov cx,5000h
- mov ah,3fh
- int 21h
- jc sr
- mov ah,3eh
- int 21h
- sr: ret
- read endp
-
- writ proc near
- mov dx,offset fn4
- sub cx,cx
- mov ah,3ch
- int 21h
- mov bx,ax
- mov dx,offset tbl
- mov cx,512
- mov ah,40h
- int 21h
- mov ah,3eh
- int 21h
- ret
- writ endp
-
- last label byte
- code ends
- end prog
-